package org.rkuk.kasutil.timeline.conditions 
{
	import org.rkuk.kasutil.timeline.ITickInfo;
	import org.rkuk.kasutil.timeline.ITicker;
	import org.rkuk.kasutil.timeline.Timeline;
	/**
	 * 实现从第一次刷新开始，在一定时间后停止刷新
	 * @author rkuk
	 */
	public class LifeTime implements ITickerUpdateCondition
	{
		private var _life:int;
		private var _autoRemoveTicker:Boolean;
		private var _startTime:Number;
		
		/**
		 * 构造函数
		 * @param	life				从开始刷新到停止刷新之间的时间间隔
		 * @param	autoRemoveTicker	停止刷新后，是否从Timeline上删除其对应的ITicker对象
		 * true表示停止刷新后自动删除ITicker，false表示不删除
		 */
		public function LifeTime(life:int,autoRemoveTicker:Boolean=true) 
		{
			if (life < 1)
				throw new Error("life can not be less than 1");
				
			_life = life;
			_autoRemoveTicker = autoRemoveTicker;
			_startTime = NaN;
		}
		
		/* INTERFACE org.rkuk.kasutil.timeline.conditions.ITickerUpdateCondition */
		
		/**
		 * 实现从第一次刷新开始，在一定时间后停止刷新
		 * @param	timeline	发出刷新信号的Timeline对象
		 * @param	ticker		可能将要被刷新的ITicker对象
		 * @param	tickInfo	Timeline发出刷新信号时的时间信息
		 * @return	true表示ITicker需要被刷新，false表示ITicker不需要被刷新
		 */
		public function isNeedUpdate(timeline:Timeline, ticker:ITicker, tickInfo:ITickInfo):Boolean
		{
			if (isNaN(_startTime))
			{
				_startTime = tickInfo.currentTime;
				return true;
			}
			
			if (tickInfo.currentTime-_startTime >= _life)
			{
				if (_autoRemoveTicker)
					timeline.unregister(ticker);
					
				return false;
			}
			
			return true;
		}
	}
}